package Foundmentation;

import java.util.*;

public class Homework {
//    public static void main(String[] args) {
////        short a = 128;
////        byte b = (byte)a;
////        int c =3;
////        byte d = (byte)c;
////        int e = (int)864.0;//出现信息丢失
////        System.out.println(b);
////        System.out.println(d);
////        System.out.println(e);
//
//        int sum = 0;
//        for (int i = 1; i <101 ; i++) {
//           if(i % 7 == 0){
//              sum = sum + i;
//           }
//        }
//        System.out.println(sum);
//
//}

//    打印1~100所有素数
//public static void main(String[] args) {


//       for (int i = 2; i <=100 ; i++) {
//            boolean is_prime = true;
//            for (int j = 2; j <i ; j++) {
//                if (i % j == 0) {
//                    is_prime = false;
//                    break;
//                }
//            }
//            if(is_prime){
//                System.out.println(i +" ");
//            }
//        }
// }
// 编写程序数一下 1到 100 的所有整数中出现多少个数字9
//public static void main(String[] args) {
//
//
//        int num = 0;
//        for (int i = 1; i <100 ; i++) {
//            if(i%10==9){
//                num++;
//            }
//
//            if(i/10 == 9){
//                num++;
//            }
//        }
//        System.out.println("出现9的次数" + num);
//    }


//  求两个数的最大公约数
//public static void main(String[] args) {
//    Scanner scanner = new Scanner(System.in);
//        int a = scanner.nextInt();
//        int b = scanner.nextInt();
//        int max = a>b?a:b;
//        int min = a<b?a:b;
//        while(min>0)
//        {
//            int tmp = max % min;
//            max = min;
//            min = tmp;
//        }
//    System.out.println(max);
//}
   // 计算1/1-1/2+1/3-1/4+1/5 …… + 1/99 - 1/100 的值 。
//public static void main(String[] args) {
//    double sum =0.0;
//    int flag = 1;
//    for (int i = 1; i < 100; i++) {
//
//        sum+=(1.0/i)*flag;
//        flag = -flag;
//    }
//    System.out.println(sum);
//}
    //求出0～n之间的所有“水仙花数”并输出。(“水仙花数”是指一个三位数，其各位数字的立方和确好等于该数本身
//public static void main(String[] args) {
//
//    for (int i = 100; i <1000 ; i++) {
//        int ge = i%10;
//        int bai = i/100;
//        int shi = i/10%10;
//        int sum = ge*ge*ge+shi*shi*shi+bai*bai*bai;
//        if(sum == i){
//            System.out.println(i);
//    }
//   }
//}
    //猜数游戏
//public static void main(String[] args) {
//    Random random = new Random();
//    int suiJi = random.nextInt(100);
//    System.out.println("生成的随机数是" + suiJi);
//    while (true) {
//        Scanner scanner = new Scanner(System.in);
//        int n = scanner.nextInt();
//        if (n < suiJi) {
//            System.out.println("小了");
//        }
//             else if (n > suiJi) {
//                System.out.println("大了");
//            }
//            else {
//                break;
//            }
//        }
//        System.out.println("对了");
//    }
    //输出一个整数的每一位，如：123的每一位是3，2，1
//public static void main(String[] args) {
//    Scanner scanner = new Scanner(System.in);
//    int n = scanner.nextInt();
//    while(n>0){
//        System.out.println(n%10);
//        n = n/10;
//    }
//
//}
    //输出n*n的乘法口诀表，n由用户输入。
//public static void main(String[] args) {
////    Scanner scanner = new Scanner(System.in);
////    int n = scanner.nextInt();
//    for (int i = 1; i <= 9; i++) {
//        for (int j = 1; j <=i ; j++) {
//            System.out.print(j+"*"+i+"="+i*j+" ");
//        }
//        System.out.println();
//    }
//}
    //数组nums包含从0到n的所有整数，但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗？
    //输入：[3,0,1]
    //输出：2
    public static int missingNumber(int[] nums) {
//        int a = 0;
//        int n = nums.length;
//        for (int i = 0; i < n; i++) {
//            a ^= nums[i];
//        }
//        for (int i = 0; i <= n; i++) {
//            a ^= i;
//        }
//        return a;
        Arrays.sort(nums);
        int n = 0;
        for (int i = 0; i <nums.length; i++) {
            if(i !=nums[i]){
                n = i;
                break;
            }
            else {
                n = i+1;
            }
        }
        return n;

    }

    //给你一个数组，将数组中的元素向右轮转 k 个位置，其中 k 是非负数
    public static void rotate(int[] nums, int k) {
        reverse(nums,0,nums.length-1);
        reverse(nums,0,k-1);
        reverse(nums,k,nums.length-1);
    }

    public static void  reverse(int[] num,int start,int end){
        while (start<end){
            int temp = num[start];
            num[start] = num[end];
            num[end] = temp;
            start++;
            end--;
        }
    }
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7};
        rotate(arr,3);
        System.out.println(Arrays.toString(arr));
    }
}
